package com.bdan.t382;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.util.Random;


@Aspect
@Component
public class PrinterAspect {

    // 前置增强：打印前自检
    @Before("execution(* com.bdan.t382.Printer.print(..))")
    public void selfCheck() {
        Random random = new Random();
        int num = random.nextInt(10); // 生成 0-9 的随机数
        System.out.println("打印机状态检测中... 检测结果：" + num);

        //修改打印机的 print 方法，使用 Random 类生成 0-9 的随机，如果随机数小于 5，则正常打印，5-7 抛出卡纸异常，7-9 抛出墨盒无墨的异常。
        if (num < 5) {
            System.out.println("打印机自检正常，可以正常打印");
        } else if (num < 7) {
            System.out.println("打印机自检异常，检测到卡纸，请及时处理");
        } else {
            System.out.println("打印机自检异常，墨盒无墨，请及时更换墨盒");
        }
    }

    // 异常增强：打印过程中出现异常时输出日志
    @AfterThrowing("execution(* com.bdan.t382.Printer.print(..))")
    public void logException() {
        System.out.println(" 打印任务出现异常！");
    }


    // 后置增强：打印成功后输出日志
    @AfterReturning("execution(* com.bdan.t382.Printer.print(..))")
    public void logAfterPrint() {
        System.out.println(" 打印任务成功完成！");
    }

}
